package escenario;

import java.util.ArrayList;

import sistemaDefensivo.BateriaDeMisiles;
import sistemaDefensivo.MisilDefensor;
import sistemaDefensivo.ServidorTerrestre;
import sistemaDefensivo.SistemaBateriaMisiles;
import sistemaDefensivo.SistemaDeRadar;
import sistemaEnemigo.GeneradorMisilesEnemigos;
import sistemaEnemigo.MisilEnemigo;

import escenario.Escenario;

public class Escenario {
	private ArrayList <BateriaDeMisiles> bateriaDeMisiles;
	private GeneradorMisilesEnemigos generadorMisilesEnemigos;
	private ArrayList <MisilDefensor> misilesDefensores;
	private ArrayList <MisilEnemigo> misilesEnemigos;
	private ArrayList <String> posDefensores;
	private ArrayList <IdPosEnemigo> posEnemigos;
	private SistemaDeRadar radar;
	private ServidorTerrestre servidorTerrestre;
	private SistemaBateriaMisiles sistemaBateriaMisiles;
	private CollisionDetector collisionDetector;

	public Escenario(){
		radar  = new SistemaDeRadar(this);
		servidorTerrestre = new ServidorTerrestre(this);
		sistemaBateriaMisiles = new SistemaBateriaMisiles(this);
		generadorMisilesEnemigos = new GeneradorMisilesEnemigos(this);
		bateriaDeMisiles = new ArrayList<BateriaDeMisiles>();
		misilesDefensores = new ArrayList <MisilDefensor>();
		misilesEnemigos = new ArrayList <MisilEnemigo>();
		posDefensores = new ArrayList <String>();
		posEnemigos = new ArrayList <IdPosEnemigo>();
		collisionDetector = new CollisionDetector(this);
	}

	public void addMisilDefensor(MisilDefensor MD){
		misilesDefensores.add(MD);
//		addPosDefensor(MD.getPosAbs());
	}
	
	public MisilDefensor getMisilesDefensores(int pos) {
		return misilesDefensores.get(pos);
	}

	public void addMisilEnemigo(MisilEnemigo ME){
		misilesEnemigos.add(ME);
	}
	
	public void removeMisilEnemigo(MisilEnemigo ME){
		misilesEnemigos.remove(this.getIndexOfMisEnemigo(ME));
	}
	
	public void removePosEnemigo(IdPosEnemigo PE){
		posEnemigos.remove(this.getIndexOfPosEnemigo(PE));
	}
	
	public void setPosEnemigo(IdPosEnemigo PE){
		posEnemigos.set(this.getIndexOfPosEnemigo(PE), PE);
	}
	
	public void setPosDefensor(int id, String pos){
		posDefensores.set(id, pos);
	}
	
	public MisilEnemigo getMisilEnemigo(int pos){
		return misilesEnemigos.get(pos);
	}
	
	public void addPosDefensor(String PD){
		posDefensores.add(PD);
	}
	
	public String getPosDefensores(int pos) {
		return posDefensores.get(pos);
	}

	public void addPosEnemigo(IdPosEnemigo PE){
		posEnemigos.add(PE);
	}
	
	public IdPosEnemigo getPosEnemigo(int id){
		return posEnemigos.get(id);
	}
	
	public int getIndexOfPosEnemigo(IdPosEnemigo PE){
		return posEnemigos.indexOf(PE);
	}
	
	public int getIndexOfMisEnemigo(MisilEnemigo ME){
		return misilesEnemigos.indexOf(ME);
	}
	
	public int getSizeArrayME(){
		return  misilesEnemigos.size();
	}
	
	public int getSizeArrayMD(){
		return  misilesDefensores.size();
	}
	
	public int getSizeArrayPosEnemigos(){
		return  posEnemigos.size();
	}
	
	public int getSizeArrayPosMD(){
		return  posDefensores.size();
	}
	
	public void addBateriaDeMisiles(BateriaDeMisiles bateriaDeMisiles) {
		this.bateriaDeMisiles.add(bateriaDeMisiles);
	}
		
	public BateriaDeMisiles getBateriaDeMisiles(int pos) {
		return bateriaDeMisiles.get(pos);
	}

	public GeneradorMisilesEnemigos getGeneradorMisilesEnemigos() {
		return generadorMisilesEnemigos;
	}

	public SistemaDeRadar getRadar() {
		return radar;
	}

	public ServidorTerrestre getServidorTerrestre() {
		return servidorTerrestre;
	}

	public SistemaBateriaMisiles getSistemaBateriaMisiles() {
		return sistemaBateriaMisiles;
	}

	public void iniciarEscenario(){
		Thread hiloRadar = new Thread(radar);
		Thread hiloServidorT = new Thread(servidorTerrestre);
		Thread hilosistemaBM = new Thread(sistemaBateriaMisiles);
		Thread hiloGeneradorME = new Thread(generadorMisilesEnemigos);
		Thread hiloCollisionDetector = new Thread(collisionDetector);
	
		hiloRadar.start();
		hiloServidorT.start();
		hilosistemaBM.start();
		hiloCollisionDetector.start();
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		hiloGeneradorME.start();
		
	}
}